﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using BussinessLogicTecnoPez;
using BussinessLogicTecnoPez.Seguridad_Tecnopez;
using System.Collections.Generic;
using Tecnopez.Globals;
using Microsoft.Practices.EnterpriseLibrary.Validation;

enum PageMode
{
    ListMode,
    NewMode,
    EditMode,
    ViewMode
}

namespace TecnoPezWeb.Modules.Seguridad
{
    public partial class ABMFuncionesTecnopez : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (this.Page.IsPostBack == false)
            {
                this.chkImagen.Attributes.Add("onclick", "showDiv();");
                addClientScript(false);
                SetMode(PageMode.ListMode);
            }

            InicializarGrilla();
            GenericMasterPage master = (GenericMasterPage)this.Master;
            master.Imagen = "../Styles/Icons/ic_soporte.gif";
            master.Titulo = "Gestión de Funciones de Tecnopez";
            cargarGrilla();
            _lblError.Text = "";
            this.pupFuncionPadre.ObjType = typeof(BussinessLogicTecnoPez.Seguridad_Tecnopez.FuncionTecnopez);
        }
       
        private void InicializarGrilla()
        {
            GrdViewInitializator<FuncionTecnopez> confG = new GrdViewInitializator<FuncionTecnopez>(ViewState,"orden","ordenDireccion", true, cargarGrilla);

            ButtonField colB = new ButtonField();
            colB.ButtonType = ButtonType.Link;
            colB.Text = "ver";
            colB.CommandName = "ver";
            ButtonField[] d = new ButtonField[1];
            d[0] = colB;

            confG.gridViewSetup(this.grdFuncionesTecnopez, true, d);

        }
        
        private void cargarGrilla()
        {
            FuncionTecnopez.getManager.ClearFilters();
            FuncionTecnopez.getManager.ClearOrders();
            FuncionTecnopez.getManager.AddFilter("NOMBRE", GenericManager<FuncionTecnopez>.filterOperator.Like, "%" + this.txtBuscarNombre.Text.Trim() + "%");
            FuncionTecnopez.getManager.AddFilter("DESCRIPCION", GenericManager<FuncionTecnopez>.filterOperator.Like, "%" + this.txtBuscarDescripcion.Text.Trim() + "%");
            
            if (ViewState["orden"] == null)
            {
                FuncionTecnopez.getManager.AddOrder("NOMBRE", GenericManager<FuncionTecnopez>.Order.orderDirection.ASC);
            }
            else
            {
                FuncionTecnopez.getManager.AddOrder(ViewState["orden"].ToString(), (GenericManager<FuncionTecnopez>.Order.orderDirection)ViewState["ordenDireccion"]);
            }

            List<FuncionTecnopez> lista = new List<FuncionTecnopez>();
            lista = FuncionTecnopez.getManager.GetFilter();
            grdFuncionesTecnopez.DataSource = lista;
            grdFuncionesTecnopez.DataBind();
        }
        
        private void SetMode(PageMode mode)
        {
            switch (mode)
            {
                case PageMode.ListMode:
                    wzrABM.ActiveStepIndex = 0;
                    addClientScript(false);
                    break;
                case PageMode.NewMode:
                    wzrABM.ActiveStepIndex = 1;
                    txtID.Text="";
                    txtID.Enabled = false;
                    txtNombre.Enabled = true;
                    txtDescripcion.Enabled = true;
                    txtUrl.Enabled = true;
                    chkImagen.Visible = false;
                    txtImagen.Visible = false;
                    fupImageUrl.Enabled = true;
                    cmdAceptar.Visible = true;
                    cmdCancelar.Enabled = true;
                    cmdEditar.Enabled = false;
                    cmdEliminar.Enabled = false;
                    pupFuncionPadre.Enable = true;
                    addClientScript(false);
                    break;
                case PageMode.EditMode:
                    wzrABM.ActiveStepIndex = 1;
                    txtID.Enabled = false;
                    txtNombre.Enabled = true;
                    txtDescripcion.Enabled = true;
                    txtUrl.Enabled = true;
                    cmdAceptar.Visible = true;
                    cmdCancelar.Enabled = true;
                    cmdEditar.Enabled = false;
                    cmdEliminar.Enabled = false;
                    fupImageUrl.Enabled = true;
                    chkImagen.Enabled = true;
                    pupFuncionPadre.Enable = true;
                    setImageMode();
                    break;
                case PageMode.ViewMode:
                    wzrABM.ActiveStepIndex = 1;
                    txtID.Enabled = false;
                    txtNombre.Enabled = false;
                    txtDescripcion.Enabled = false;
                    txtUrl.Enabled = false;
                    cmdAceptar.Visible = false;
                    cmdCancelar.Enabled = true;
                    cmdEditar.Enabled = true;
                    cmdEliminar.Enabled = true;
                    fupImageUrl.Enabled = false;
                    chkImagen.Enabled = false;
                    pupFuncionPadre.Enable = false;
                    setImageMode();
                    break;
            }
        }

        private void addClientScript(bool visible)
        {
            string strScript;

            if (visible)
                strScript = "var isFirst='true';";
            else
                strScript = "var isFirst='false';";
            this.ClientScript.RegisterClientScriptBlock(typeof(Page), "loadCheck", strScript, true);
        }

        protected void cmdNuevo_Click(object sender, EventArgs e)
        {
            txtID.Text = "";
            txtNombre.Text = "";
            txtUrl.Text = "";
            txtDescripcion.Text = "";
            txtImagen.Text = "";
            pupFuncionPadre.ItemSelected = null;
            SetMode(PageMode.NewMode);
        }

        protected void cmdCancelar_Click(object sender, EventArgs e)
        {
            SetMode(PageMode.ListMode);
        }
        protected void cmdAceptar_Click(object sender, EventArgs e)
        {            
            try
            {
                FuncionTecnopez objFuncion = new FuncionTecnopez();
                objFuncion.Nombre = txtNombre.Text.Trim();
                objFuncion.Descripcion = txtDescripcion.Text.Trim();
                objFuncion.URL = txtUrl.Text.Trim();
                if (this.pupFuncionPadre.ItemSelected !=null)
                {
                    FuncionTecnopez objPadre = new FuncionTecnopez();
                    objPadre = (FuncionTecnopez)this.pupFuncionPadre.ItemSelected;
                    objFuncion.FuncionPadre = objPadre;
                }

                ValidationResults valid = Validation.Validate<FuncionTecnopez>(objFuncion);
                if (valid.IsValid)
                {
                    if (txtID.Text.Trim() == "")
                    {
                        objFuncion.ImageUrl = fupImageUrl.FileName;
                        if (FuncionTecnopez.getManager.Insert(objFuncion) != true)
                        {
                            throw FuncionTecnopez.getManager.GeneratedException;
                        }
                    }
                    else
                    {
                        if (this.chkImagen.Checked)
                            objFuncion.ImageUrl = txtImagen.Text;
                        else
                            objFuncion.ImageUrl = fupImageUrl.FileName;

                        objFuncion.IdFuncionTecnopez = int.Parse(txtID.Text.ToUpper().Trim());
                        if (FuncionTecnopez.getManager.Update(objFuncion) != true)
                        {
                            throw FuncionTecnopez.getManager.GeneratedException;
                        }
                    }
                    //mueve el archivo seleccionado al path de imagenes para el css
                    //por el momento el path esta pegado al codigo
                    if (fupImageUrl.HasFile)
                    {
                        string path = Functions.getPhysicalPathTecnopezWEB(this.Page) + "\\Styles\\ThemeOffice\\";
                        fupImageUrl.SaveAs(path + fupImageUrl.FileName);
                    }
                    cargarGrilla();
                    SetMode(PageMode.ListMode);
                }                
            }
            catch (Exception exc)
            {
                _lblError.Text = "error: No se pudo realizar la operación";
                Functions.LogError(exc);
                SetMode(PageMode.NewMode);
            }
        }

        protected void grdFuncionesTecnopez_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "ver")
            {
                int Key = int.Parse(e.CommandArgument.ToString());
                int IdFuncion = int.Parse(grdFuncionesTecnopez.DataKeys[Key].Value.ToString());
                FuncionTecnopez.getManager.ClearFilters();
                FuncionTecnopez.getManager.AddFilter("IdFuncionTecnopez", BussinessLogicTecnoPez.GenericManager<FuncionTecnopez>.filterOperator.Equals, IdFuncion);
                FuncionTecnopez objFuncion = FuncionTecnopez.getManager.GetOne();
                txtID.Text = objFuncion.IdFuncionTecnopez.ToString();
                txtNombre.Text = objFuncion.Nombre.Trim();
                txtDescripcion.Text = objFuncion.Descripcion.ToString();
                if (string.IsNullOrEmpty(objFuncion.URL))
                    txtUrl.Text = "";
                else
                    txtUrl.Text = objFuncion.URL.ToString();

                if (objFuncion.ImageUrl != null)
                    txtImagen.Text = objFuncion.ImageUrl.ToString();
                else
                    txtImagen.Text = "";

                if (objFuncion.FuncionPadre != null)
                    pupFuncionPadre.ItemSelected = objFuncion.FuncionPadre;
                else
                    pupFuncionPadre.ItemSelected = null;

                SetMode(PageMode.ViewMode);
            }
        }

        private void setImageMode()
        {
            txtImagen.Enabled = false;
            if (txtImagen.Text.Trim() == string.Empty)
            {
                chkImagen.Visible = false;
                txtImagen.Visible = false;
                fupImageUrl.Visible = true;
                addClientScript(false);
            }
            else
            {
                chkImagen.Visible = true;
                chkImagen.Checked = true;
                txtImagen.Visible = true;
                fupImageUrl.Visible = true;
                addClientScript(true);
            }
        }
        protected void cmdEditar_Click(object sender, EventArgs e)
        {
            SetMode(PageMode.EditMode);
        }

        protected void cmdEliminar_Click(object sender, EventArgs e)
        {
            FuncionTecnopez objFuncion = new FuncionTecnopez();
            objFuncion.IdFuncionTecnopez = int.Parse(this.txtID.Text);
            int res = FuncionTecnopez.getManager.Delete(objFuncion);
            SetMode(PageMode.ListMode);
            cargarGrilla();
        }
        protected void cmdBuscar_Click(object sender, EventArgs e)
        {
            SetMode(PageMode.ListMode);
        }
}
}